package com.phpxiu.app.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.List;

/**
 * @file
 * @brief 数据库管理
 * @author 吴金洲
 * @note 数据库管理
 *
 */
public class DatabaseHelper extends SQLiteOpenHelper {
    private final static String DB="COM.PHPXIU.APP.KKY";
    private final static Gson GSON=new Gson();
    private SQLiteDatabase mDatabase;

    public DatabaseHelper(Context context,int version) {
        super(context,DB,null, version);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(createBaseSql());
        if(db.isReadOnly()){
            if(db.isOpen()){
                db.close();
            }
            mDatabase=getWritableDatabase();
        }else{
            mDatabase=db;
        }
    }

    /**
     * 当将来数据库的表格以及字段发生变化时，用户可以提高此version，从而触发onUpgrade()达到旧数据升级的效果。
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }


    /***
     * 插入记录
     * @param table
     * @param values
     */
    public void insert(String table,ContentValues values){
        mDatabase.insert(table,null,values);
    }

    /**
     * 字段条件删除记录
     * @param table
     * @param field 条件字段
     * @param value 比较值
     */
    public void deleteEqual(String table,String field,String value){
        mDatabase.delete(table,field+"=?",new String[]{value});
    }

    /**
     * 修改记录
     * @param table
     * @param values
     */
    public void update(String table,ContentValues values,String field,String value){
        mDatabase.update(table, values, field+"=?", new String[]{value});
    }

    /**
     * 查询记录，返回每条记录列表
     * @param table
     * @param columns 要返回的查询字段
     * @param selection 查询条件 如id=1
     * @return
     */
    public List query(String table,String[]columns,String selection,Class cls){
        Cursor cursor=mDatabase.query(table, columns, selection, null,null, null, null);
        int len=columns.length;
        int count=cursor.getCount();
        List records=new ArrayList();
        if(count!=0){//记录条数不为零
            if(cursor.moveToFirst()){//取第一条记录
                do{
                    StringBuffer record=new StringBuffer("{");
                    int index=0;
                    for (String key:columns){
                        StringBuffer col=new StringBuffer("\"");
                        col.append(key).append("\":\"");
                        String value=cursor.getString(cursor.getColumnIndex(key));
                        if(index!=len-1) {
                            col.append(value).append("\",");
                        }else{
                            col.append(value).append("\"");
                        }
                        index++;
                    }
                    record.append("}");
                    records.add(GSON.fromJson(record.toString(),cls));
                }while(cursor.moveToNext());//有下一条，取一条记录
            }
        }
        cursor.close();
        return records;
    }

    /**
     * 清除记录
     * @param tableName
     */
    public void clear(String tableName){
        String clear="delete from "+tableName;//清空数据
        String resetRecordId="update sqlite_sequence SET seq = 0 where name ="+tableName;//自增长ID为0
        mDatabase.execSQL(clear);
        mDatabase.execSQL(resetRecordId);
    }

    /**
     * 创建初始化数据库语句
     */
    private static String createBaseSql(){
        StringBuffer sql=new StringBuffer("create table if not exists ");
        sql.append("KKY_DOWNLOADED_VIDEOS ");
        sql.append("(record_id integer primary key,");
        sql.append("id text,");
        sql.append("title text,");
        sql.append("logo text,");
        sql.append("duration text,");
        sql.append("intro text,");
        sql.append("url text,");
        sql.append("file text,");//文件名
        sql.append("state integer)");//1：下载成功;0：未下载成功
        return sql.toString();
    }
}
